package com.team9.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

/**
 * 令牌工具类
 *
 * @author YoungKai
 * @date 2021/1/7 14:15
 */
public class JwtUtil {

    //过期时间
    static long ex = System.currentTimeMillis()+25*60*1000;

    //密钥
    static final String secret = "jwt_secret";

    /**
     * 令牌的生成
     * @param userId
     * @return
     */
    public static String jwtcreate(String userId){
        Date expire = new Date(ex);
        //生成一个jwt的构建器
        JWTCreator.Builder builder = JWT.create();
        //设置jwt令牌发送的对象  (payload的部分)
        builder.withAudience(userId);
        //设置令牌的过期时间点
        builder.withExpiresAt(expire);
        //设置令牌生成的加密算法
        Algorithm  algorithm = Algorithm.HMAC256(secret);
        String sign = builder.sign(algorithm);
        return sign;
    }

    /**
     * 解析令牌，从令牌中获取用户相关信息
     * @param token
     * @return
     */
    public static String getUserInfo(String token){
        DecodedJWT decode = JWT.decode(token);
        String userId = decode.getAudience().get(0);
        return userId;
    }

    /**
     * 检验令牌
     * @param token
     * @return
     */
    public static boolean checkToken(String token){
        Algorithm algorithm = Algorithm.HMAC256(secret);
        //使用与令牌生成相同的算法，构建一个验证令牌的校验器对象
        JWTVerifier jwtVerifier = JWT.require(algorithm).build();
        try{
            DecodedJWT verify = jwtVerifier.verify(token);

            if (verify != null){
                System.out.println("ok");
                return true;
            }else{
                System.out.println("no ok");
                return false;
            }
        }catch(Exception ex){
            System.out.println(ex);
            return false;
        }
    }
}
